home *** CD-ROM | disk | FTP | other *** search
Wrap
package netscape.applet; import java.net.MalformedURLException; import java.net.URL; import netscape.application.CommandEvent; import netscape.application.FormElement; import netscape.application.FoundationPanel; import netscape.application.Target; import netscape.security.AppletSecurityException; import netscape.util.Hashtable; import netscape.util.InconsistencyException; class EmbeddedObject implements Target { IntTable beans; int parentContext; int frameContext; int contextID; int objectID; URL documentURL; URL codebaseURL; URL archiveURL; int width; int height; String programName; String className; Hashtable attribs; Hashtable params; static final int OBJECT_TYPE_BEAN = 0; static final int OBJECT_TYPE_PROG_EXPLICIT = 1; static final int OBJECT_TYPE_PROG_DEFAULT = 2; static final int OBJECT_TYPE_PROG_JAVASCRIPT = 3; int objectType; EmbeddedBeanTracker beanTracker; EmbeddedProgramTracker programTracker; Object actualObject; EmbeddedObjectFrame frame; FoundationPanel panel; Task task; EmbeddedProgramTaskOwner taskOwner; static final int OBJECT_CREATED = 0; static final int OBJECT_INITIALIZED = 1; static final int OBJECT_STARTED = 2; static final int OBJECT_STOPPED = 3; static final int OBJECT_DESTROYED = 4; int state; static EmbeddedBeanOwner defaultBeanOwner = new DefaultEmbeddedOwner(); static EmbeddedProgramOwner defaultProgramOwner; EmbeddedBeanOwner beanOwner; int width() { return this.width; } int height() { return this.height; } URL documentURL() { return this.documentURL; } URL codebaseURL() { return this.codebaseURL; } URL archiveURL() { return this.archiveURL; } Hashtable attributes() { return this.attribs; } Hashtable parameters() { return this.params; } Object getActualObject() { return this.objectType != 0 ? this.task.application() : this.actualObject; } String getText() { return this.actualObject instanceof FormElement ? ((FormElement)this.actualObject).formElementText() : null; } IntTable beans() { return this.beans; } static EmbeddedObject registerBean(EmbeddedObject var0) { EmbeddedObject var1 = var0.taskOwner.getProgramForBean(var0); var1.beans.put(var0.objectID, var0); return var1; } static EmbeddedObject unregisterBean(EmbeddedObject var0) { EmbeddedObject var1 = var0.taskOwner.getProgramForBean(var0); var1.beans.remove(var0.objectID); return var1; } static void initObject(int var0, int var1, int var2, int var3, String[] var4, int var5, boolean var6) { URL var16; try { var16 = new URL(var4[0]); } catch (MalformedURLException var27) { EmbeddedObjectNatives.pMochaOnLoad(var1, -1); return; } Hashtable var15 = new Hashtable(); Hashtable var14 = new Hashtable(); var14.put("document", var4[0]); for(int var7 = 1; var7 < var4.length; ++var7) { String var11 = var4[var7]; int var8 = var11.indexOf(61); if (var8 >= 0) { if (var7 < var5) { String var20 = var11.substring(0, var8).toLowerCase(); var14.put(var20, var11.substring(var8 + 1)); if (var20.equals("name")) { var14.put("id", var11.substring(var8 + 1)); } } else { var15.put(var11.substring(0, var8).toLowerCase(), var11.substring(var8 + 1)); } } } URL var17 = computeCodebase(var16, var14); URL var18 = computeArchive(var17, var14, var15); int var9; try { var9 = Integer.parseInt((String)var14.get("width")); } catch (NumberFormatException var26) { var9 = 50; } int var10; try { var10 = Integer.parseInt((String)var14.get("height")); } catch (NumberFormatException var25) { var10 = 50; } String var13 = (String)var14.get("code"); if (var13 == null) { throw new Error("CLASSID was not specified for OBJECT tag."); } else { String var12 = (String)var15.get("program name"); if (var12 == null) { var12 = var4[0] + "_" + var2; } Task var19 = Task.taskNamed(var17, var12); if (var19 == null) { Hashtable var21; Hashtable var22; byte var23; int var24; String var28; if (var6) { var28 = var13; var21 = var14; var22 = var15; var23 = 1; var24 = var3; } else { var28 = "netscape.application.Application"; var21 = new Hashtable(); var22 = new Hashtable(); var23 = 2; var24 = 0; } new EmbeddedObject(var0, var1, var2, var24, var16, var17, var18, 0, 0, var12, var28, var21, var22, var23); if (var6) { return; } } if (var6) { new EmbeddedObject(var0, var1, var2, var3, var16, var17, var18, 0, 0, var12, (String)null, var14, var15, 1); } else { new EmbeddedObject(var0, var1, var2, var3, var16, var17, var18, var9, var10, var12, var13, var14, var15, 0); } } } static URL computeCodebase(URL var0, Hashtable var1) { String var2 = (String)var1.get("document"); String var3 = (String)var1.get("codebase"); if (var3 == null) { int var4 = var2.lastIndexOf(47) + 1; var3 = var2.substring(0, var4); } else { if (!var3.endsWith("/")) { var3 = var3 + "/"; } try { URL var8 = new URL(var0, var3); var3 = var8.toString(); int var5 = var3.lastIndexOf(47) + 1; if (var5 != var3.length() - 1) { var3 = var3.substring(0, var5); } } catch (MalformedURLException var7) { } if (!var2.startsWith("file:") && var3.startsWith("file:")) { throw new AppletSecurityException("EmbeddedObject: Can't use file:// URL in CODEBASE spec", var3); } } URL var9 = var0; try { var9 = new URL(var3); var1.put("codebase", var3); } catch (MalformedURLException var6) { } return var9; } static URL computeArchive(URL var0, Hashtable var1, Hashtable var2) { String var3 = (String)var1.get("codebase"); URL var4 = null; String var5 = (String)var2.get("archive"); if (var5 != null) { var2.remove("archive"); try { int var6 = var5.indexOf(44); if (var6 != -1) { var5 = var5.substring(0, var6); } URL var7 = new URL(var0, var5); var5 = var7.toString(); } catch (MalformedURLException var9) { } if (!var3.startsWith("file:") && var5.startsWith("file:")) { throw new AppletSecurityException("EmbeddedObject: Can't use file:// URL in ARCHIVE spec", var5); } try { var4 = new URL(var5); var1.put("archive", var5); } catch (MalformedURLException var8) { } } return var4; } static void startObject(int var0, int var1, int var2) { EmbeddedObject var3 = EmbeddedProgramTaskOwner.findBeanOrProgram(var0, var1); if (var3 != null) { var3.frameContext = var2; var3.frameContext = var2; var3.task.addEvent(new CommandEvent(var3, "start", (Object)null)); } } static void stopObject(int var0, int var1, int var2) { EmbeddedObject var3 = EmbeddedProgramTaskOwner.findBeanOrProgram(var0, var1); if (var3 != null) { var3.frameContext = var2; var3.stopObject(); } } void stopObject() { this.task.addEvent(new CommandEvent(this, "stop", (Object)null)); } static void destroyObject(int var0, int var1) { EmbeddedObject var2 = EmbeddedProgramTaskOwner.findBean(var0, var1); if (var2 != null) { var2.destroyObject(); } } void destroyObject() { EmbeddedObject var1 = unregisterBean(this); this.task.addEvent(new CommandEvent(this, "destroy", (Object)null)); if (var1.beans.count() == 0) { if (var1.taskOwner.count() > 1) { var1.taskOwner.removeProgram(var1); var1.task.addEvent(new CommandEvent(var1, "destroy", (Object)null)); return; } if (var1.taskOwner.programOwner.programCanShutdown(this.programTracker)) { var1.taskOwner.removeProgram(var1); Task.unregisterTask(var1.task); var1.task.addEvent(new CommandEvent(var1, "destroy", (Object)null)); } } } void createApplication() { if (this.className == null) { this.task = Task.taskNamed(this.codebaseURL, this.programName); this.taskOwner = (EmbeddedProgramTaskOwner)this.task.taskOwner(); this.className = this.taskOwner.getCurrentProgram().className; this.taskOwner.addProgram(this); this.task.addEvent(new CommandEvent(this, "init", (Object)null)); if (this.objectType != 3) { this.task.addEvent(new CommandEvent(this, "callMochaOnLoad", (Object)null)); } } else { this.taskOwner = new EmbeddedProgramTaskOwner(this); this.task = new Task(this.programName, this.className, this.codebaseURL, this.archiveURL, this.taskOwner); this.task.start(); this.task.addEvent(new CommandEvent(this, "init", (Object)null)); } this.beans = new IntTable(); } EmbeddedObject(int var1, int var2, int var3, int var4, URL var5, URL var6, URL var7, int var8, int var9, String var10, String var11, Hashtable var12, Hashtable var13, int var14) { if (var14 == 0) { this.beanTracker = new EmbeddedBeanTracker(this); } else { this.programTracker = new EmbeddedProgramTracker(this); } this.parentContext = var1; this.frameContext = var2; this.contextID = var3; this.objectID = var4; this.documentURL = var5; this.codebaseURL = var6; this.archiveURL = var7; this.width = var8; this.height = var9; this.programName = var10; this.className = var11; this.attribs = var12; this.params = var13; this.objectType = var14; if (var14 != 0) { this.createApplication(); } else { this.task = Task.taskNamed(var6, var10); this.taskOwner = (EmbeddedProgramTaskOwner)this.task.taskOwner(); this.frame = new EmbeddedObjectFrame(this); this.frame.pack(); this.frame.show(); registerBean(this); this.task.addEvent(new CommandEvent(this, "init", (Object)null)); } } EmbeddedObject(URL var1, String var2, String var3, String var4) { this.programTracker = new EmbeddedProgramTracker(this); this.codebaseURL = var1; this.documentURL = var1; this.archiveURL = var1; this.programName = var2; this.className = var3; this.attribs = new Hashtable(); this.params = new Hashtable(); if (var4 != null) { this.params.put("embedded owner", var4); } this.objectType = 3; this.createApplication(); } synchronized void setState(int var1) { switch (var1) { case 1: if (this.state != 0) { throw new InconsistencyException("Invalid state change."); } break; case 2: if (this.state != 1 && this.state != 3) { throw new InconsistencyException("Invalid state change."); } break; case 3: if (this.state != 2) { throw new InconsistencyException("Invalid state change."); } break; case 4: if (this.objectType == 0) { if (this.state != 3) { throw new InconsistencyException("Invalid state change."); } } else if (this.state == 4) { throw new InconsistencyException("Invalid state change."); } } this.state = var1; } public void performCommand(String var1, Object var2) { if ("init".equals(var1)) { this.init(); } else if ("start".equals(var1)) { this.start(); } else if ("stop".equals(var1)) { this.stop(); } else if ("destroy".equals(var1)) { this.destroy(); } else if ("callMochaOnLoad".equals(var1)) { EmbeddedObjectNatives.pMochaOnLoad(this.frameContext, 0); } else { throw new InconsistencyException("unknown command: " + var1); } } void init() { this.setState(1); if (this.objectType != 0) { if (this.taskOwner.programOwner != null) { return; } this.taskOwner.programOwner = defaultProgramOwner; this.taskOwner.beanOwner = defaultBeanOwner; } else { this.beanOwner = this.taskOwner.beanOwner; } String var1 = (String)this.params.get("embedded owner"); if (var1 != null) { Class var3; try { var3 = this.task.loadClass(var1); } catch (ClassNotFoundException var7) { throw new InconsistencyException("Unable to load class: " + var1); } Object var2; try { var2 = var3.newInstance(); } catch (InstantiationException var5) { throw new InconsistencyException("Bag things..."); } catch (IllegalAccessException var6) { throw new InconsistencyException("Bag things..."); } if (this.objectType != 0) { boolean var4 = false; if (var2 instanceof EmbeddedProgramOwner) { this.taskOwner.programOwner = (EmbeddedProgramOwner)var2; var4 = true; } if (var2 instanceof EmbeddedBeanOwner) { this.taskOwner.beanOwner = (EmbeddedBeanOwner)var2; var4 = true; } if (!var4) { System.err.println("Error: " + var1 + " does not implement EmbeddedBeanOwner or EmbeddedProgramOwner interfaces."); System.err.println(" Using default owners. "); } } else if (var2 instanceof EmbeddedBeanOwner) { this.beanOwner = (EmbeddedBeanOwner)var2; } else { System.err.println("Error: " + var1 + " does not implement EmbeddedBeanOwner interface."); System.err.println(" Using default owner. "); } } if (this.objectType == 0) { this.beanOwner.embeddedBeanDidInit(this.beanTracker); } else if (!this.taskOwner.programInitialized) { this.taskOwner.programOwner.programDidInit(this.programTracker); this.taskOwner.programInitialized = true; } if (this.objectType == 1 || this.objectType == 0) { EmbeddedObjectNatives.pMochaOnLoad(this.frameContext, 0); } } void start() { this.setState(2); if (this.objectType == 0) { this.beanOwner.embeddedBeanDidStart(this.beanTracker); } } void stop() { this.setState(3); if (this.objectType == 0) { this.beanOwner.embeddedBeanDidStop(this.beanTracker); } } void destroy() { this.setState(4); if (this.objectType == 0) { this.beanOwner.embeddedBeanDidDestroy(this.beanTracker); this.frame.getComponents(); this.frame.hide(); this.frame.dispose(); this.frame.destroy(); } else { this.task.application().stopRunning(); } } static { defaultProgramOwner = (EmbeddedProgramOwner)defaultBeanOwner; } }